﻿var classperso;
function Personnage(x, y) {

    // Position du perso
    this.X;
    this.Y;
    classperso = this;

    this.jeux = document.getElementById("jeux");
    this.perso = document.getElementById("perso");
    this.test = document.getElementById("test");

    this.cote_sprite = null;

    //Permet de connaitre le nombre de mouvement que le joueur a fait
    this.mouvement = 0;

    //Séquence d'image pour un personnage (4 étapes : gauche - milieu - droite - milieu) en boucle (pour l'animation)
    this.perso_img = {
        down: { 0: "images/personnages/perso7.png", 1: "images/personnages/perso8.png", 2: "images/personnages/perso9.png", 3: "images/personnages/perso8.png" },
        up: { 0: "images/personnages/perso1.png", 1: "images/personnages/perso2.png", 2: "images/personnages/perso3.png", 3: "images/personnages/perso2.png" },
        left: { 0: "images/personnages/perso10.png", 1: "images/personnages/perso11.png", 2: "images/personnages/perso12.png", 3: "images/personnages/perso11.png" },
        right: { 0: "images/personnages/perso4.png", 1: "images/personnages/perso5.png", 2: "images/personnages/perso6.png", 3: "images/personnages/perso5.png" },
        current: { src: "" }
    };

    this.draw = function () {
        this.perso.style.left = this.X + "px";
        this.perso.style.top = this.Y + "px";
        if(classjeu != null)
            classjeu.carte[this.X / 50][(this.Y + 20) / 50].changeEtat();
    }

    //Ecoute les touches pour que le personnage bouge dans la direction souhaitée et anime le perso
    this.move = function (event) {
        switch (event.keyCode) {
            case 37: case 113: case 81:
                this.X = this.perso.offsetLeft - 50;
                this.cote_sprite.src = this.perso_img.left[this.mouvement % 4];
                classjeu.score = classjeu.score - 5;
                break;
            case 38: case 122: case 90:
                this.Y = this.perso.offsetTop - 50;
                this.cote_sprite.src = this.perso_img.up[this.mouvement % 4];
                classjeu.score = classjeu.score - 5;
                break;
            case 39: case 100: case 68:
                this.X = 50 + this.perso.offsetLeft;
                this.cote_sprite.src = this.perso_img.right[this.mouvement % 4];
                classjeu.score = classjeu.score - 5;
                break;
            case 40: case 115: case 83:
                this.Y = 50 + this.perso.offsetTop;
                this.cote_sprite.src = this.perso_img.down[this.mouvement % 4];
                classjeu.score = classjeu.score - 5;
                break;
        }

        this.mouvement++;
        
        //Empeche le perso de dépasser les bords
        if (this.Y < -20) { this.Y = -20; }
        else if (this.Y > this.jeux.offsetHeight - this.perso.offsetHeight) { this.Y = this.jeux.offsetHeight - this.perso.offsetHeight; }
        if (this.X < 0) { this.X = 0; }
        else if (this.X > this.jeux.offsetWidth-50) { this.X = this.jeux.offsetWidth-50; }

        //Desinne la nouvelle position du perso
        this.draw();

        //Vérifie si le personnage se situe sur un fruit pour chaque fruit.
        for (var i in fruits) {
            if (perso.X == fruits[i].X && perso.Y + 20 == fruits[i].Y) {
                classjeu.score += fruits[i].score;
                fruits[i].manger();
                fruits.splice(i, 1);
            }
        }

        //Si le nombre de fruit atteind 0, on a gagné le niveau
        var fruit_list = document.getElementsByClassName("fruit");
        if (fruit_list.length <= 0) {
            classjeu.victoire();
            return null;
        }
        classjeu.test.innerHTML = "Score : " + classjeu.score;
        
        //Si le personnage se trouve sur un animal, on a perdu le niveau
        for (var i in animaux) {
            if (animaux[i].X == this.X && animaux[i].Y == this.Y) {
                classjeu.gameover();
            }
        }
    }

    this.init = function (x, y) {

        this.X = x;
        this.Y = y;

        WinJS.Binding.processAll(this.perso, this.perso_img.current);
        this.cote_sprite = WinJS.Binding.as(this.perso_img.current);
        this.cote_sprite.src = this.perso_img.down[1];
        this.draw();

    }

    this.init(x, y);
}